<?php
class ActividadesController extends AppController{

    var $name = 'Actividades';
    var $appModule = 'Actividad';
	var $helpers = array('Html', 'Form', 'Number', 'Codigo','GetList', 'TextDate');
	
	function index() {
		$q = $this->getBusqueda($this->data['Actividade']['busqueda']);
		$this->set('q', $q);
		$this->Actividade->recursive = -1;
		$conditions = array('Actividade.activo'=>true);
		if (!empty($q)){	        
			$conditions = array(
					'Actividade.activo'=>true,
					'Actividade.empresa_id'=>$this->empresaId(),
					'or'=>array(
						'Actividade.codigo SIMILAR TO'=>$q,
						'Actividade.tema SIMILAR TO'=>"%$q%"
					)
				);
		}
		$this->paginate['Actividade'] = array(
	            'conditions'=>$conditions,
	            'order'=>array('Actividade.fecha'=>'desc'),
            	'contain' => array(
                	'TipoActividade.descripcion'            
				)          
	        );	    
	    $actividades = $this->paginate('Actividade');	    
		$this->set('limite', $this->limite);
		$this->set('actividades', $actividades);			
	}
	
	function add() {
		if (!empty($this->data)) {
			$this->data['Actividade']['empresa_id'] = $this->empresaId(); // segun sesion
			$this->data['Actividade']['ejercicio_id'] = $this->ejercicioId();
			$this->data['Actividade']['periodo_id'] = $this->periodoId();
			$this->data['Actividade']['activo'] = true;
			$this->data['Actividade']['usuario_creacion_id'] = $this->usuarioId(); // segun sesion
			$this->data['Actividade']['fecha_creacion'] = 'now()';
			$this->data['Actividade']['codigo'] = $this->Actividade->generateCodigo();
			$this->Actividade->create();
			if ($this->Actividade->save($this->data)) {
				$this->Session->setFlash(__('El registro de Actividad ha sido guardado', true));
				$this->redirect(array('action'=>'index'));
			} 
			else {
				$this->Session->setFlash(__('El registro de  Actividad no ha podido ser guardado. Intente nuevamente..', true));
			}
		}               
		$this->data['Actividade']['codigo'] = $this->Actividade->generateCodigo();
		$tipo = $this->Actividade->TipoActividade->find('list', array('fields'=>array('id','descripcion'),'conditions'=>array('TipoActividade.activo'=>true)));
		$this->set('tipo_actividades',$tipo);
	}

	function edit($id = null) {
		if (!$id && empty($this->data)) {
			$this->Session->setFlash(__('Actividad no existe', true));
			$this->redirect(array('action'=>'index'));
		}
		if (!empty($this->data)) {
			
			$this->data['Actividade']['usuario_modificacion_id'] = $this->usuarioId(); // segun sesion
			$this->data['Actividade']['fecha_modificacion'] = 'now()';
			if ($this->Actividade->save($this->data)) {
				$this->Session->setFlash(__('El registro de Actividad ha sido guardado', true));
				$this->redirect(array('action'=>'index'));
			} else {
				$this->Session->setFlash(__('El registro de Actividad no ha podido se guardado. Intente nuevamente.', true));
			}
		}
		else {
			$this->data = $this->Actividade->read(null, $id);			
		}
		$tipo = $this->Actividade->TipoActividade->find('list', array('fields'=>array('id','descripcion'),'conditions'=>array('TipoActividade.activo'=>true)));
		$this->set('tipo_actividades',$tipo);
	}
	
	function delete($id = null, $verbose = true) {
                if (!$id) {
                    if ($verbose){
                        $this->Session->setFlash(__('Id de Actividad invalido', true));
                        $this->redirect(array('action'=>'index'));
                    }
                    else return false;
                }
                
                $this->Actividade->recursive = -1;
                $data = $this->Actividade->read(null, $id);
                $data['Actividade']['activo']=0;
                $data['Actividade']['usuario_borrado_id']=$this->usuarioId();
                $data['Actividade']['fecha_borrado']='now()';

                if (!$this->Actividade->save($data) && !verbose)
                    return false;
                if ($verbose){
                    $this->Session->setFlash(__('Actividad eliminada', true));
                    $this->redirect(array('action'=>'index'));
                }
                else return true;
	}

    function process(){// procesa anulaciones y eliminaciones en bloque
        $op = isset($this->params['form']['delete'])?'eliminar':'anular';
        $flag = true;
        $i = 0;
        foreach($this->data as $item){
            if ($item['id']!='0'){
                if(isset($this->params['form']['delete'])){ // eliminar
                    $flag = $this->delete($item['Actividade']['id'], false);
                }
                if (!$flag){
                    $data = $this->Actividade->read(null, $item['Actividade']['id']);
                    $this->Session->setFlash(__("Se ha producido un error al $op el registro de Actividad #".$data['Actividade']['codigo'], true));
                    break;
                }
            }
            $i++;
        }
        if ($flag && $i > 0){
            $this->Session->setFlash(__("El proceso de $op Actividad se ha realizado con exito.", true));
        }
        $this->redirect(array('action'=>'index'));
    }
    
    function buscar($q = null){
        $result = '';
        //estableciendo par�metros de b�squeda
        if(!empty($this->params['url']['q'])){
            $q = $this->params['url']['q'];
        } elseif(!empty($this->params['form']['q'])) {
            $q = $this->params['form']['q'];
        } elseif(!empty($this->data['Actividade']['q'])){
            $q = $this->data['Actividade']['q'];
        }

        if(empty($q)){
            $result = array('no ha establecido los parámetros correctamente');
        } else {
            $q = strtoupper($q);
			$this->Actividade->Behaviors->attach('Containable');
            $result = $this->Actividade->find('all',array(
                'conditions'=>array(
                    'Actividade.activo'=>true,
					'OR'=>array(
                        'Actividade.codigo LIKE'=>$q,
						'Actividade.tema LIKE'=>"$q%"
					)
                ),
                'limit'=>100
            ));
        }

        //para peticiones de autocompletado
        $res = array();
        if(!empty($this->params['url']['autocomplete']) || !empty($this->params['form']['autocomplete'])){
            foreach($result as $value){ 
                $res[] = array('value'=>$value['Actividade']['id'], 'display'=>'<span style="color:gray;font-size:.9em">'. $value['Actividade']['codigo'] .'</span><div style="float:right;font-size:.8em" title="'. $value['Actividade']['razon_social'] .'">'. $value['Actividade']['razon_social'] .'</div>');
            }
            $result = $res;
        }

        if ($this->RequestHandler->isAjax()){
            $this->_ajaxify($result);
        } else {
            return $result;
        }
    }
    
    function reporte($fecha1=null, $fecha2=null){
    	$this->reporte_html();
		$sql = 'select
					a.id as "Actividade__id",
					a.fecha  as "Actividade__fecha",
				    a.tema  as "Actividade__tema",
				    a.lugar  as "Actividade__lugar",
				    ta.descripcion  as "Actividade__descripcion"
				from actividad.actividades a
				left join actividad.tipo_actividades ta on ta.id = a.tipo_actividad_id
				where a.ejercicio_id = %ejercicio_id
				and a.fecha between \'%fecha1\' and \'%fecha2\'
				and a.activo = true';
		$actividades = $this->Actividade->query(str_replace(array('%ejercicio_id', '%fecha1','%fecha2'), array($this->ejercicioId(), $fecha1, $fecha2),$sql));	
		$mes1 = $this->periodos[$this->periodoId($fecha1)-0];
		$mes2 = $this->periodos[$this->periodoId($fecha2)-0];		
		$this->set(compact('actividades', 'mes1', 'mes2'));
    }
}
?>